package com.zhuiyun.project.api.system.user.service;

import com.zhuiyun.project.api.system.user.entity.SysUser;
import com.zhuiyun.project.api.system.user.model.SysUserModel;
import com.zhuiyun.project.common.errorCode.CommonException;
import com.zhuiyun.project.common.response.CommonResult;
import com.zhuiyun.project.utils.pageUtil.PageRequest;
import com.zhuiyun.project.utils.pageUtil.PageResult;

/**
 * @ClassName UserService
 * @Description 系统用户服务类
 * @Author zcy
 * @Date 2023/3/24 15:43
 **/
public interface SysUserService {
    /**
    * @Author hbx
    * @Description 通过登录名登录
    * @Date 2023/6/22 10:43
    * @param loginName
    */
    SysUser getUserByLoginName(String loginName);

    /**
    * @Author hbx
    * @Description 通过邮箱查询用户
    * @Date 2023/6/22 10:43
    * @param emailAccount
    */
    SysUser getUserByEmailAccount(String emailAccount);

    /**
    * @Author hbx
    * @Description 修改用户状态
    * @Date 2023/6/22 10:43
    * @param sysUser
    */
    void updateUserByLogin(SysUser sysUser);

    /**
    * @Author hbx
    * @Description 新增用户
    * @Date 2023/6/22 10:44
    * @param sysUser
    */
    int saveUser(SysUser sysUser) throws CommonException;

    /**
    * @Author hbx
    * @Description 修改用户信息
    * @Date 2023/6/22 10:44
    * @param sysUserModel
    */
    CommonResult updateUser(SysUserModel sysUserModel) throws CommonException;

    /**
    * @Author hbx
    * @Description 删除用户
    * @Date 2023/6/22 10:44
    * @param id
    */
    CommonResult delUserById(Integer id) throws CommonException;

    /**
    * @Author hbx
    * @Description 分页查询
    * @Date 2023/6/22 10:44
    * @param sysUserModel
    * @param pageRequest
    */
    CommonResult getUserByPage(SysUserModel sysUserModel, PageRequest pageRequest);

    /**
    * @Author hbx
    * @Description 根据手机号查询用户信息
    * @Date 2023/6/22 10:45
    * @param phoneAccount
    */
    SysUser getUserByPhoneAccount(String phoneAccount);

    /**
    * @Author hbx
    * @Description 根据条件分页查询已分配用户角色列表
    * @Date 2023/6/22 10:45
    * @param pageRequest
    * @param user
    */
    PageResult selectAllocatedList(PageRequest pageRequest, SysUser user);

    /**
    * @Author hbx
    * @Description 查询未分配用户角色列表
    * @Date 2023/6/22 10:45
    * @param pageRequest
    * @param user
    */
    PageResult selectUnallocatedList(PageRequest pageRequest, SysUser user);

    /**
    * @Author hbx
    * @Description 根据条件分页查询用户列表
    * @Date 2023/6/22 10:45
    * @param pageRequest
    * @param user
    */
    PageResult selectUserList(PageRequest pageRequest, SysUser user);

    /**
    * @Author hbx
    * @Description 校验用户名称是否唯一
    * @Date 2023/6/22 10:46
    * @param user
    */
    boolean checkLoginNameUnique(SysUser user);

    /**
    * @Author hbx
    * @Description 校验手机号码是否唯一
    * @Date 2023/6/22 10:46
    * @param user
    */
    boolean checkPhoneUnique(SysUser user);

    /**
    * @Author hbx
    * @Description 校验email是否唯一
    * @Date 2023/6/22 10:46
    * @param user
    */
    boolean checkEmailUnique(SysUser user);

    /**
    * @Author hbx
    * @Description 新增用户信息
    * @Date 2023/6/22 10:46
    * @param user
    */
    public int insertUser(SysUser user);

    /**
    * @Author hbx
    * @Description 校验用户是否有数据权限
    * @Date 2023/6/22 10:46
    * @param id
    */
    public void checkUserDataScope(Integer id);

    /**
    * @Author hbx
    * @Description 通过用户ID查询用户
    * @Date 2023/6/22 10:47
    * @param id
    */
    public SysUser selectUserById(Integer id);

    /**
    * @Author hbx
    * @Description 校验用户是否允许操作
    * @Date 2023/6/22 10:47
    * @param user
    */
    public void checkUserAllowed(SysUser user);;

    /**
    * @Author hbx
    * @Description 修改用户信息
    * @Date 2023/6/22 10:47
    * @param user
    */
    public int updateUsers(SysUser user);

    /**
    * @Author hbx
    * @Description 通过用户ID删除用户
    * @Date 2023/6/22 10:48
    * @param userId
    */
    public int deleteUserById(Integer userId);

    /**
    * @Author hbx
    * @Description 批量删除用户信息
    * @Date 2023/6/22 10:48
    * @param userIds
    */
    public CommonResult deleteUserByIds(Integer[] userIds);

    /**
    * @Author hbx
    * @Description 修改用户状态
    * @Date 2023/6/22 10:48
    * @param user
    */
    public int updateUserStatus(SysUser user);


    /**
     * 根据用户ID查询用户所属角色组
     *
     * @param loginName 用户名
     * @return 结果
     */
    public String selectUserRoleGroup(String loginName);

    /**
     * 重置用户密码
     * @param id
     * @param encryptPassword
     * @return
     */
    int resetUserPwd(Integer id, String encryptPassword);

    /**
     * 修改个人基本信息
     * @param sysUser
     * @return
     */
    int updateProfile(SysUser sysUser);

    int updateAvatarId(String avatarId, Integer userId);
}
